package com.avic.system.common.util.ex;

import org.apache.commons.lang3.StringUtils;

/**
 * 业务异常代码;
 * <p>
 * 400 系统级别异常
 * 100 业务异常
 *
 * @author: huangsheng
 * @date: 2017/10/19 上午11:05
 */
public enum BizErrorCode {

    /**
     * 未知异常
     */
    UNKNOWN_ERROR("400999", "未知异常"),

    /**
     * 系统异常
     */
    SYSTEM_ERROR("400400", "系统异常"),

    /**
     * 参数为空
     */
    PARAM_ERROR("100001", "参数错误"),

    /**
     * 账号错误
     */
    USER_LOGIN_NAME_ERROR("100002", "登录账号错误"),

    /**
     * 密码错误
     */
    LOGIN_PASSWORD_ERROR("100004", "密码错误"),

    /**
     * 用户被禁用
     */
    USER_IS_DISABLE("100005", "当前账号被禁用"),

    /**
     * 用户登入名称已经存在
     */
    USER_LOGIN_NAME_IS_EXIST("100006", "用户登录名称已经存在"),

    /**
     * 用户不存在
     */
    USER_IS_NOE_EXIST("100007", "用户不存在"),

    /**
     * 角色code已经存在
     */
    ROLE_CODE_IS_EXIST("100008", "角色code已经存在"),

    /**
     * 用户不存在
     */
    ROLE_IS_NOE_EXIST("100009", "角色不存在"),

    /**
     * 权限code已经存在
     */
    PERMISSION_CODE_IS_EXIST("100010", "权限code已经存在"),

    /**
     * 权限不存在
     */
    PERMISSION_IS_NOE_EXIST("100011", "权限数据不存在"),

    /**
     * 角色数据不存在
     */
    ROLE_IS_NOT_EXIST("100012", "角色数据不存在"),

    /**
     * 权限不存在
     */
    ROLE_NAME_IS_EXIST("100013", "角色名存在");


    /**
     * 业务异常码
     */
    private String code;

    /**
     * 业务异常描述
     */
    private String description;


    BizErrorCode(String code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 根据异常码获取异常枚举对象
     *
     * @param code 异常码
     * @return 异常枚举对象
     */
    public static BizErrorCode getByCode(String code) {
        for (BizErrorCode bizErrorCode : values()) {
            if (StringUtils.equals(bizErrorCode.getCode(), code)) {
                return bizErrorCode;
            }
        }

        return null;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}
